/**
 * Set Class
 *
 * A game entity representing a game space.  Broadly speaking, a "place".
 *
 * instanciation:
 * var set = HIPPO.Lib.Set.create();
 */
HIPPO.Lib.Set = {

    /**
     * The Set's HIPPO.Lib.Presentation object
     *
     * @type object
     */
    presentation: {},



    /**
     * Factory for the Set class
     *
     * @return object A Set instance
     */
    create: function() {
        "use strict";

        var this_class = this,
            this_obj   = {};

        // instantiate Set class and initialize its properties
        this_obj = Object.create(this_class, {
            presentation: {
                value:        HIPPO.Lib.Presentation.create(),
                configurable: false,
                enumerable:   false,
                writeable:    false,
                get:          this_class.getPresentation,
                set:          this_class.setPresentation
            }
        });

        // lock up & deliver object
        return Object.seal(this_obj);
    },



    /**
     * Get the value of the presentation property
     *
     * @return object The presentation property
     */
    getPresentation: function() {
        "use strict";

        return this.presentation;
    },

    

    /**
     * Throw an exception if someone attempts to set the presentation property
     */
    setPresentation: function() {
        "use strict";

        throw new Exception('Error: illegal attempt to set the value of HIPPO.Lib.Set.presentation');
    }

};

// lock up Set class
Object.freeze(HIPPO.Lib.Set);
